package fa7.socialcode.web;

import java.text.MessageFormat;
import java.util.ResourceBundle;

import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import fa7.socialcode.model.Usuario;
import fa7.socialcode.service.UsuarioManager;


public class UsuarioForm {
	  private final Log log = LogFactory.getLog(UsuarioForm.class);
	  private String id;
	  public Usuario usuario = new Usuario();
	  public UsuarioManager mgr;

	  public String getId() {
	    return id;
	  }

	  public void setId(String id) {
	    this.id = id;
	  }

	  public Usuario getUsuario() {
	    return usuario;
	  }

	  public void setUsuario(Usuario usuario) {
	    this.usuario = usuario;
	  }

	  public void setUsuarioManager(UsuarioManager usuarioManager) {
	    this.mgr = usuarioManager;
	  }

	  public String edit() {

	    if (id != null) {
	      // assuming edit
	      setUsuario(mgr.findUsuario(id));
	    }

	    return "success";
	  }

	  public String save() {
	    Usuario usu = getUsuario();
	    if (usu.getId() == 0) {
	      usu.setId(null);
	    }
	    mgr.saveUsuario(usu);
	    addMessage("usuario.saved", getUsuario().getNome());

	    return "success";
	  }

	  public String delete() {
	    mgr.removeUsuario(getUsuario().getId().toString());
	    addMessage("usuario.deleted", getUsuario().getNome());

	    return "success";
	  }

	  // Convenience methods ====================================================
	  public static String getRequestParameter(String name) {
	    return (String) FacesContext.getCurrentInstance().getExternalContext()
	        .getRequestParameterMap().get(name);
	  }

	  public void addMessage(String key, String arg) {
	    // sure is a lot of work to get the named ResourceBundle in JSF, eh?
	    ApplicationFactory factory = (ApplicationFactory) FactoryFinder
	        .getFactory(FactoryFinder.APPLICATION_FACTORY);
	    String bundleName = factory.getApplication().getMessageBundle();
	    ResourceBundle messages = ResourceBundle.getBundle(bundleName);

	    // it's even more work to format a message with args
	    MessageFormat form = new MessageFormat(messages.getString(key));

	    String msg = form.format(new Object[] { arg });

	    // add message to session so it can live past redirects
	    // the MessageFilter class will take care of removing it
	    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
	        .getExternalContext().getSession(true);
	    session.setAttribute("message", msg);
	  }
}
